package sgpt.passeio;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import sgpt.Beans.Cliente;
import sgpt.Beans.DAO.ConstantesDAO;
import sgpt.Beans.DAO.JdbcDaoFactory;
import sgpt.Beans.DAO.interfaces.DAOFactory;
import sgpt.Beans.DAO.interfaces.IclienteDAO;


public class CompraPasseioDAO implements IcompraPasseioDAO {

	private IclienteDAO clienteDAO;
	private DAOFactory dao;
	private Statement db;
	private IpasseioDAO passeioDAO;
	
	public CompraPasseioDAO(Connection conn) {
		super();
		dao = JdbcDaoFactory.getInstance();
		clienteDAO = dao.getClienteDAO();
		try {
			this.db = conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("******* Erro ao criar Statement "+this.getClass().getSimpleName());
			System.out.println(e.getMessage());
		}
	}

	public void insereCompraPasseio(CompraPasseio compra) {
		Date date = new Date();
		String data = (new SimpleDateFormat("dd/mm/aa")).format(date);
		String sql = "INSERT INTO compraPasseios VALUES(NULL,"+compra.getCliente().getId()+
					","+compra.getPasseio().getID()+",'"+date+"')";
		try {
			db.executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("******* Erro ao inserir em "+this.getClass().getSimpleName());
		}
		
	}

	public void removeCompraPasseio(CompraPasseio compra) {
		// TODO Auto-generated method stub
		
	}

	public void updateCompraPasseio(CompraPasseio compra) {
		// TODO upadte compra passeio
		
	}

	public List<Cliente> getClientes(Passeio passeio) {
		return getClientes(passeio.getID());
	}

	/**
	 * retirna uma lista dos clientes q compraram um passeio
	 * @param identificador do passeios
	 * @return lista de clientes
	 */
	public List<Cliente> getClientes(long passeioid) {
		List<Cliente> retClientes = new ArrayList<Cliente>();
		Cliente cliente;
		String sql = "SELECT clientes.* FROM compraPasseios join passeios join clientes ON (compraPasseios.passeio_id=passeios.id " +
					"and compraPasseios.cliente_id = clientes.id) WHERE compraPasseios.passeio_id = "+passeioid;
		
		try {
			ResultSet rs = db.executeQuery(sql);
			while (rs.next()){
				cliente = clienteDAO.getClienteByID(rs.getLong(ConstantesDAO.id));
				retClientes.add(cliente);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return retClientes;
	}
	
	/**
	 * retorna um alista dos clientes q compraram um passeio
	 * @param objeto Passeio
	 * @return lista de clientes
	 */
	public List<Passeio> getPasseios(Cliente cliente) {
		return getPasseios(cliente.getId());
	}

	/**
	 * retorna uma lista dos passeios que um cliente comprou
	 * @param identificador do cliente
	 * @return lista de Passeios
	 */
	public List<Passeio> getPasseios(long clienteid) {
		List<Passeio> retPasseios = new ArrayList<Passeio>();
		Passeio passeio;
		String sql = "SELECT passeios.* FROM compraPasseios join passeios join clientes ON (compraPasseios.passeio_id=passeios.id " +
					"and compraPasseios.cliente_id = clientes.id) WHERE compraPasseios.cliente_id = "+clienteid;
		
		try {
			ResultSet rs = db.executeQuery(sql);
			while (rs.next()){
				passeio = passeioDAO.getPasseioByID(rs.getLong(ConstantesDAO.id));
				retPasseios.add(passeio);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return retPasseios;
	}
}
 
